home *** CD-ROM | disk | FTP | other *** search
/ Programmer Plus 2007 / Programmer-Plus-2007.iso / Programming / Compilers / digital marsC compier / dm / include / win32 / Imagehlp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-08  |  22.9 KB  |  923 lines

  1. /*++ BUILD Version: 0001     Increment this if a change has global effects
  2.  
  3. Copyright (c) 1993-1996  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     imagehlp.h
  8.  
  9. Abstract:
  10.  
  11.     This module defines the prptotypes and constants required for the image
  12.     help routines.
  13.  
  14. Revision History:
  15.  
  16. --*/
  17.  
  18. #ifndef _IMAGEHLP_
  19. #define _IMAGEHLP_
  20.  
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24.  
  25. //
  26. // Define checksum return codes.
  27. //
  28.  
  29. #define CHECKSUM_SUCCESS            0
  30. #define CHECKSUM_OPEN_FAILURE       1
  31. #define CHECKSUM_MAP_FAILURE        2
  32. #define CHECKSUM_MAPVIEW_FAILURE    3
  33. #define CHECKSUM_UNICODE_FAILURE    4
  34.  
  35. // Define Splitsym flags.
  36.  
  37. #define SPLITSYM_REMOVE_PRIVATE     0x00000001      // Remove CV types/symbols and Fixup debug
  38.                                                     //  Used for creating .dbg files that ship
  39.                                                     //  as part of the product.
  40.  
  41. #define SPLITSYM_EXTRACT_ALL        0x00000002      // Extract all debug info from image.
  42.                                                     //  Normally, FPO is left in the image
  43.                                                     //  to allow stack traces through the code.
  44.                                                     //  Using this switch is similar to linking
  45.                                                     //  with -debug:none except the .dbg file
  46.                                                     //  exists...
  47.  
  48. #ifdef _IMAGEHLP_SOURCE_
  49. #define IMAGEAPI __stdcall
  50. #else
  51. #define IMAGEAPI DECLSPEC_IMPORT __stdcall
  52. #endif
  53.  
  54. //
  55. // Define checksum function prototypes.
  56. //
  57.  
  58. PIMAGE_NT_HEADERS
  59. IMAGEAPI
  60. CheckSumMappedFile (
  61.     LPVOID BaseAddress,
  62.     DWORD FileLength,
  63.     LPDWORD HeaderSum,
  64.     LPDWORD CheckSum
  65.     );
  66.  
  67. DWORD
  68. IMAGEAPI
  69. MapFileAndCheckSumA (
  70.     LPSTR Filename,
  71.     LPDWORD HeaderSum,
  72.     LPDWORD CheckSum
  73.     );
  74.  
  75. DWORD
  76. IMAGEAPI
  77. MapFileAndCheckSumW (
  78.     PWSTR Filename,
  79.     LPDWORD HeaderSum,
  80.     LPDWORD CheckSum
  81.     );
  82.  
  83. #ifdef UNICODE
  84. #define MapFileAndCheckSum  MapFileAndCheckSumW
  85. #else
  86. #define MapFileAndCheckSum  MapFileAndCheckSumA
  87. #endif // !UNICODE
  88.  
  89.  
  90. BOOL
  91. IMAGEAPI
  92. TouchFileTimes (
  93.     HANDLE FileHandle,
  94.     LPSYSTEMTIME lpSystemTime
  95.     );
  96.  
  97. BOOL
  98. IMAGEAPI
  99. SplitSymbols (
  100.     LPSTR ImageName,
  101.     LPSTR SymbolsPath,
  102.     LPSTR SymbolFilePath,
  103.     DWORD Flags                 // Combination of flags above
  104.     );
  105.  
  106. HANDLE
  107. IMAGEAPI
  108. FindDebugInfoFile (
  109.     LPSTR FileName,
  110.     LPSTR SymbolPath,
  111.     LPSTR DebugFilePath
  112.     );
  113.  
  114. HANDLE
  115. IMAGEAPI
  116. FindExecutableImage(
  117.     LPSTR FileName,
  118.     LPSTR SymbolPath,
  119.     LPSTR ImageFilePath
  120.     );
  121.  
  122. BOOL
  123. IMAGEAPI
  124. UpdateDebugInfoFile(
  125.     LPSTR ImageFileName,
  126.     LPSTR SymbolPath,
  127.     LPSTR DebugFilePath,
  128.     PIMAGE_NT_HEADERS NtHeaders
  129.     );
  130.  
  131. BOOL
  132. IMAGEAPI
  133. UpdateDebugInfoFileEx(
  134.     LPSTR ImageFileName,
  135.     LPSTR SymbolPath,
  136.     LPSTR DebugFilePath,
  137.     PIMAGE_NT_HEADERS NtHeaders,
  138.     DWORD OldChecksum
  139.     );
  140.  
  141. BOOL
  142. IMAGEAPI
  143. BindImage(
  144.     IN LPSTR ImageName,
  145.     IN LPSTR DllPath,
  146.     IN LPSTR SymbolPath
  147.     );
  148.  
  149. typedef enum _IMAGEHLP_STATUS_REASON {
  150.     BindOutOfMemory,
  151.     BindRvaToVaFailed,
  152.     BindNoRoomInImage,
  153.     BindImportModuleFailed,
  154.     BindImportProcedureFailed,
  155.     BindImportModule,
  156.     BindImportProcedure,
  157.     BindForwarder,
  158.     BindForwarderNOT,
  159.     BindImageModified,
  160.     BindExpandFileHeaders,
  161.     BindImageComplete,
  162.     BindMismatchedSymbols,
  163.     BindSymbolsNotUpdated
  164. } IMAGEHLP_STATUS_REASON;
  165.  
  166. typedef
  167. BOOL
  168. (__stdcall *PIMAGEHLP_STATUS_ROUTINE)(
  169.     IMAGEHLP_STATUS_REASON Reason,
  170.     LPSTR ImageName,
  171.     LPSTR DllName,
  172.     ULONG Va,
  173.     ULONG Parameter
  174.     );
  175.  
  176.  
  177. BOOL
  178. IMAGEAPI
  179. BindImageEx(
  180.     IN DWORD Flags,
  181.     IN LPSTR ImageName,
  182.     IN LPSTR DllPath,
  183.     IN LPSTR SymbolPath,
  184.     IN PIMAGEHLP_STATUS_ROUTINE StatusRoutine
  185.     );
  186.  
  187. #define BIND_NO_BOUND_IMPORTS 0x00000001
  188. #define BIND_NO_UPDATE        0x00000002
  189. #define BIND_ALL_IMAGES       0x00000004
  190.  
  191. BOOL
  192. IMAGEAPI
  193. ReBaseImage(
  194.     IN     LPSTR CurrentImageName,
  195.     IN     LPSTR SymbolPath,
  196.     IN     BOOL  fReBase,          // TRUE if actually rebasing, false if only summing
  197.     IN     BOOL  fRebaseSysfileOk, // TRUE is system images s/b rebased
  198.     IN     BOOL  fGoingDown,       // TRUE if the image s/b rebased below the given base
  199.     IN     ULONG CheckImageSize,   // Max size allowed  (0 if don't care)
  200.     OUT    ULONG *OldImageSize,    // Returned from the header
  201.     OUT    ULONG *OldImageBase,    // Returned from the header
  202.     OUT    ULONG *NewImageSize,    // Image size rounded to next separation boundary
  203.     IN OUT ULONG *NewImageBase,    // (in) Desired new address.
  204.                                    // (out) Next address (actual if going down)
  205.     IN     ULONG TimeStamp         // new timestamp for image, if non-zero
  206.     );
  207.  
  208. #define IMAGE_SEPARATION (64*1024)
  209.  
  210.  
  211. typedef struct _LOADED_IMAGE {
  212.     LPSTR                 ModuleName;
  213.     HANDLE                hFile;
  214.     PUCHAR                MappedAddress;
  215.     PIMAGE_NT_HEADERS     FileHeader;
  216.     PIMAGE_SECTION_HEADER LastRvaSection;
  217.     ULONG                 NumberOfSections;
  218.     PIMAGE_SECTION_HEADER Sections;
  219.     ULONG                 Characteristics;
  220.     BOOLEAN               fSystemImage;
  221.     BOOLEAN               fDOSImage;
  222.     LIST_ENTRY            Links;
  223.     ULONG                 SizeOfImage;
  224. } LOADED_IMAGE, *PLOADED_IMAGE;
  225.  
  226.  
  227. PLOADED_IMAGE
  228. IMAGEAPI
  229. ImageLoad(
  230.     LPSTR DllName,
  231.     LPSTR DllPath
  232.     );
  233.  
  234. BOOL
  235. IMAGEAPI
  236. ImageUnload(
  237.     PLOADED_IMAGE LoadedImage
  238.     );
  239.  
  240. PIMAGE_NT_HEADERS
  241. IMAGEAPI
  242. ImageNtHeader (
  243.     IN PVOID Base
  244.     );
  245.  
  246. PVOID
  247. IMAGEAPI
  248. ImageDirectoryEntryToData (
  249.     IN PVOID Base,
  250.     IN BOOLEAN MappedAsImage,
  251.     IN USHORT DirectoryEntry,
  252.     OUT PULONG Size
  253.     );
  254.  
  255. PIMAGE_SECTION_HEADER
  256. IMAGEAPI
  257. ImageRvaToSection(
  258.     IN PIMAGE_NT_HEADERS NtHeaders,
  259.     IN PVOID Base,
  260.     IN ULONG Rva
  261.     );
  262.  
  263. PVOID
  264. IMAGEAPI
  265. ImageRvaToVa(
  266.     IN PIMAGE_NT_HEADERS NtHeaders,
  267.     IN PVOID Base,
  268.     IN ULONG Rva,
  269.     IN OUT PIMAGE_SECTION_HEADER *LastRvaSection
  270.     );
  271.  
  272. BOOL
  273. IMAGEAPI
  274. MapAndLoad(
  275.     LPSTR ImageName,
  276.     LPSTR DllPath,
  277.     PLOADED_IMAGE LoadedImage,
  278.     BOOL DotDll,
  279.     BOOL ReadOnly
  280.     );
  281.  
  282. BOOL
  283. IMAGEAPI
  284. GetImageConfigInformation(
  285.     PLOADED_IMAGE LoadedImage,
  286.     PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
  287.     );
  288.  
  289. DWORD
  290. IMAGEAPI
  291. GetImageUnusedHeaderBytes(
  292.     PLOADED_IMAGE LoadedImage,
  293.     LPDWORD SizeUnusedHeaderBytes
  294.     );
  295.  
  296. BOOL
  297. IMAGEAPI
  298. SetImageConfigInformation(
  299.     PLOADED_IMAGE LoadedImage,
  300.     PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
  301.     );
  302.  
  303. BOOL
  304. IMAGEAPI
  305. UnMapAndLoad(
  306.    PLOADED_IMAGE LoadedImage
  307.    );
  308.  
  309. typedef struct _IMAGE_DEBUG_INFORMATION {
  310.     LIST_ENTRY List;
  311.     DWORD Size;
  312.     PVOID MappedBase;
  313.     USHORT Machine;
  314.     USHORT Characteristics;
  315.     DWORD CheckSum;
  316.     DWORD ImageBase;
  317.     DWORD SizeOfImage;
  318.  
  319.     DWORD NumberOfSections;
  320.     PIMAGE_SECTION_HEADER Sections;
  321.  
  322.     DWORD ExportedNamesSize;
  323.     LPSTR ExportedNames;
  324.  
  325.     DWORD NumberOfFunctionTableEntries;
  326.     PIMAGE_FUNCTION_ENTRY FunctionTableEntries;
  327.     DWORD LowestFunctionStartingAddress;
  328.     DWORD HighestFunctionEndingAddress;
  329.  
  330.     DWORD NumberOfFpoTableEntries;
  331.     PFPO_DATA FpoTableEntries;
  332.  
  333.     DWORD SizeOfCoffSymbols;
  334.     PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
  335.  
  336.     DWORD SizeOfCodeViewSymbols;
  337.     PVOID CodeViewSymbols;
  338.  
  339.     LPSTR ImageFilePath;
  340.     LPSTR ImageFileName;
  341.     LPSTR DebugFilePath;
  342.  
  343.     DWORD TimeDateStamp;
  344.  
  345.     BOOL  RomImage;
  346.     PIMAGE_DEBUG_DIRECTORY DebugDirectory;
  347.     DWORD NumberOfDebugDirectories;
  348.  
  349.     DWORD Reserved[ 3 ];
  350.  
  351. } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
  352.  
  353.  
  354. PIMAGE_DEBUG_INFORMATION
  355. IMAGEAPI
  356. MapDebugInformation (
  357.     HANDLE FileHandle,
  358.     LPSTR FileName,
  359.     LPSTR SymbolPath,
  360.     DWORD ImageBase
  361.     );
  362.  
  363. BOOL
  364. IMAGEAPI
  365. UnmapDebugInformation(
  366.     PIMAGE_DEBUG_INFORMATION DebugInfo
  367.     );
  368.  
  369. HANDLE
  370. IMAGEAPI
  371. FindExecutableImage(
  372.     LPSTR FileName,
  373.     LPSTR SymbolPath,
  374.     LPSTR ImageFilePath
  375.     );
  376.  
  377. BOOL
  378. IMAGEAPI
  379. SearchTreeForFile(
  380.     LPSTR RootPath,
  381.     LPSTR InputPathName,
  382.     LPSTR OutputPathBuffer
  383.     );
  384.  
  385. BOOL
  386. IMAGEAPI
  387. MakeSureDirectoryPathExists(
  388.     LPCSTR DirPath
  389.     );
  390.  
  391. //
  392. // UnDecorateSymbolName Flags
  393. //
  394.  
  395. #define UNDNAME_COMPLETE                 (0x0000)  // Enable full undecoration
  396. #define UNDNAME_NO_LEADING_UNDERSCORES   (0x0001)  // Remove leading underscores from MS extended keywords
  397. #define UNDNAME_NO_MS_KEYWORDS           (0x0002)  // Disable expansion of MS extended keywords
  398. #define UNDNAME_NO_FUNCTION_RETURNS      (0x0004)  // Disable expansion of return type for primary declaration
  399. #define UNDNAME_NO_ALLOCATION_MODEL      (0x0008)  // Disable expansion of the declaration model
  400. #define UNDNAME_NO_ALLOCATION_LANGUAGE   (0x0010)  // Disable expansion of the declaration language specifier
  401. #define UNDNAME_NO_MS_THISTYPE           (0x0020)  // NYI Disable expansion of MS keywords on the 'this' type for primary declaration
  402. #define UNDNAME_NO_CV_THISTYPE           (0x0040)  // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration
  403. #define UNDNAME_NO_THISTYPE              (0x0060)  // Disable all modifiers on the 'this' type
  404. #define UNDNAME_NO_ACCESS_SPECIFIERS     (0x0080)  // Disable expansion of access specifiers for members
  405. #define UNDNAME_NO_THROW_SIGNATURES      (0x0100)  // Disable expansion of 'throw-signatures' for functions and pointers to functions
  406. #define UNDNAME_NO_MEMBER_TYPE           (0x0200)  // Disable expansion of 'static' or 'virtual'ness of members
  407. #define UNDNAME_NO_RETURN_UDT_MODEL      (0x0400)  // Disable expansion of MS model for UDT returns
  408. #define UNDNAME_32_BIT_DECODE            (0x0800)  // Undecorate 32-bit decorated names
  409. #define UNDNAME_NAME_ONLY                (0x1000)  // Crack only the name for primary declaration;
  410.                                                                                                    //  return just [scope::]name.  Does expand template params
  411. #define UNDNAME_NO_ARGUMENTS             (0x2000)  // Don't undecorate arguments to function
  412. #define UNDNAME_NO_SPECIAL_SYMS          (0x4000)  // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc)
  413.  
  414. DWORD
  415. IMAGEAPI
  416. WINAPI
  417. UnDecorateSymbolName(
  418.     LPCSTR   DecoratedName,         // Name to undecorate
  419.     LPSTR    UnDecoratedName,       // If NULL, it will be allocated
  420.     DWORD    UndecoratedLength,     // The maximym length
  421.     DWORD    Flags                  // See above.
  422.     );
  423.  
  424. //
  425. // StackWalking API
  426. //
  427.  
  428. typedef enum {
  429.     AddrMode1616,
  430.     AddrMode1632,
  431.     AddrModeReal,
  432.     AddrModeFlat
  433. } ADDRESS_MODE;
  434.  
  435. typedef struct _tagADDRESS {
  436.     DWORD         Offset;
  437.     WORD          Segment;
  438.     ADDRESS_MODE  Mode;
  439. } ADDRESS, *LPADDRESS;
  440.  
  441.  
  442. //
  443. // This structure is included in the STACKFRAME structure,
  444. // and is used to trace through usermode callbacks in a thread's
  445. // kernel stack.  The values must be copied by the kernel debugger
  446. // from the DBGKD_GET_VERSION and WAIT_STATE_CHANGE packets.
  447. //
  448. typedef struct _KDHELP {
  449.  
  450.     //
  451.     // address of kernel thread object, as provided in the
  452.     // WAIT_STATE_CHANGE packet.
  453.     //
  454.     DWORD   Thread;
  455.  
  456.     //
  457.     // offset in thread object to pointer to the current callback frame
  458.     // in kernel stack.
  459.     //
  460.     DWORD   ThCallbackStack;
  461.  
  462.     //
  463.     // offsets to values in frame:
  464.     //
  465.     // address of next callback frame
  466.     DWORD   NextCallback;
  467.  
  468.     // address of saved frame pointer (if applicable)
  469.     DWORD   FramePointer;
  470.  
  471.     //
  472.     // Address of the kernel function that calls out to user mode
  473.     //
  474.     DWORD   KiCallUserMode;
  475.  
  476.     //
  477.     // Address of the user mode dispatcher function
  478.     //
  479.     DWORD   KeUserCallbackDispatcher;
  480.  
  481. } KDHELP, *PKDHELP;
  482.  
  483.  
  484. typedef struct _tagSTACKFRAME {
  485.     ADDRESS     AddrPC;               // program counter
  486.     ADDRESS     AddrReturn;           // return address
  487.     ADDRESS     AddrFrame;            // frame pointer
  488.     ADDRESS     AddrStack;            // stack pointer
  489.     LPVOID      FuncTableEntry;       // pointer to pdata/fpo or NULL
  490.     DWORD       Params[4];            // possible arguments to the function
  491.     BOOL        Far;                  // WOW far call
  492.     BOOL        Virtual;              // is this a virtual frame?
  493.     DWORD       Reserved[3];          // used internally by StackWalk api
  494.     KDHELP      KdHelp;
  495. } STACKFRAME, *LPSTACKFRAME;
  496.  
  497. typedef
  498. BOOL
  499. (__stdcall *PREAD_PROCESS_MEMORY_ROUTINE)(
  500.     HANDLE  hProcess,
  501.     LPCVOID lpBaseAddress,
  502.     LPVOID  lpBuffer,
  503.     DWORD   nSize,
  504.     LPDWORD lpNumberOfBytesRead
  505.     );
  506.  
  507. typedef
  508. LPVOID
  509. (__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE)(
  510.     HANDLE  hProcess,
  511.     DWORD   AddrBase
  512.     );
  513.  
  514. typedef
  515. DWORD
  516. (__stdcall *PGET_MODULE_BASE_ROUTINE)(
  517.     HANDLE  hProcess,
  518.     DWORD   ReturnAddress
  519.     );
  520.  
  521.  
  522. typedef
  523. DWORD
  524. (__stdcall *PTRANSLATE_ADDRESS_ROUTINE)(
  525.     HANDLE    hProcess,
  526.     HANDLE    hThread,
  527.     LPADDRESS lpaddr
  528.     );
  529.  
  530. BOOL
  531. IMAGEAPI
  532. StackWalk(
  533.     DWORD                             MachineType,
  534.     HANDLE                            hProcess,
  535.     HANDLE                            hThread,
  536.     LPSTACKFRAME                      StackFrame,
  537.     LPVOID                            ContextRecord,
  538.     PREAD_PROCESS_MEMORY_ROUTINE      ReadMemoryRoutine,
  539.     PFUNCTION_TABLE_ACCESS_ROUTINE    FunctionTableAccessRoutine,
  540.     PGET_MODULE_BASE_ROUTINE          GetModuleBaseRoutine,
  541.     PTRANSLATE_ADDRESS_ROUTINE        TranslateAddress
  542.     );
  543.  
  544. #define API_VERSION_NUMBER 5
  545.  
  546. typedef struct API_VERSION {
  547.     USHORT  MajorVersion;
  548.     USHORT  MinorVersion;
  549.     USHORT  Revision;
  550.     USHORT  Reserved;
  551. } API_VERSION, *LPAPI_VERSION;
  552.  
  553. LPAPI_VERSION
  554. IMAGEAPI
  555. ImagehlpApiVersion(
  556.     VOID
  557.     );
  558.  
  559. LPAPI_VERSION
  560. IMAGEAPI
  561. ImagehlpApiVersionEx(
  562.     LPAPI_VERSION AppVersion
  563.     );
  564.  
  565. DWORD
  566. IMAGEAPI
  567. GetTimestampForLoadedLibrary(
  568.     HMODULE Module
  569.     );
  570.  
  571. BOOL
  572. IMAGEAPI
  573. RemovePrivateCvSymbolic(
  574.     PCHAR   DebugData,
  575.     PCHAR * NewDebugData,
  576.     ULONG * NewDebugSize
  577.     );
  578.  
  579. VOID
  580. IMAGEAPI
  581. RemoveRelocations(
  582.     PCHAR ImageName
  583.     );
  584.  
  585. //
  586. // typedefs for function pointers
  587. //
  588. typedef BOOL
  589. (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(
  590.     LPSTR ModuleName,
  591.     ULONG BaseOfDll,
  592.     PVOID UserContext
  593.     );
  594.  
  595. typedef BOOL
  596. (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(
  597.     LPSTR SymbolName,
  598.     ULONG SymbolAddress,
  599.     ULONG SymbolSize,
  600.     PVOID UserContext
  601.     );
  602.  
  603. typedef BOOL
  604. (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(
  605.     LPSTR ModuleName,
  606.     ULONG ModuleBase,
  607.     ULONG ModuleSize,
  608.     PVOID UserContext
  609.     );
  610.  
  611. typedef BOOL
  612. (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(
  613.     HANDLE  hProcess,
  614.     ULONG   ActionCode,
  615.     PVOID   CallbackData,
  616.     PVOID   UserContext
  617.     );
  618.  
  619. //
  620. // symbol flags
  621. //
  622. #define SYMF_OMAP_GENERATED   0x00000001
  623. #define SYMF_OMAP_MODIFIED    0x00000002
  624.  
  625. //
  626. // symbol type enumeration
  627. //
  628. typedef enum {
  629.     SymNone,
  630.     SymCoff,
  631.     SymCv,
  632.     SymPdb,
  633.     SymExport,
  634.     SymDeferred,
  635.     SymSym                  // .sym file
  636. } SYM_TYPE;
  637.  
  638. //
  639. // symbol data structure
  640. //
  641. typedef struct _IMAGEHLP_SYMBOL {
  642.     DWORD                       SizeOfStruct;           // set to sizeof(IMAGEHLP_SYMBOL)
  643.     DWORD                       Address;                // virtual address including dll base address
  644.     DWORD                       Size;                   // estimated size of symbol, can be zero
  645.     DWORD                       Flags;                  // info about the symbols, see the SYMF defines
  646.     DWORD                       MaxNameLength;          // maximum size of symbol name in 'Name'
  647.     CHAR                        Name[1];                // symbol name (null terminated string)
  648. } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
  649.  
  650. //
  651. // module data structure
  652. //
  653. typedef struct _IMAGEHLP_MODULE {
  654.     DWORD                       SizeOfStruct;           // set to sizeof(IMAGEHLP_MODULE)
  655.     DWORD                       BaseOfImage;            // base load address of module
  656.     DWORD                       ImageSize;              // virtual size of the loaded module
  657.     DWORD                       TimeDateStamp;          // date/time stamp from pe header
  658.     DWORD                       CheckSum;               // checksum from the pe header
  659.     DWORD                       NumSyms;                // number of symbols in the symbol table
  660.     SYM_TYPE                    SymType;                // type of symbols loaded
  661.     CHAR                        ModuleName[32];         // module name
  662.     CHAR                        ImageName[256];         // image name
  663.     CHAR                        LoadedImageName[256];   // symbol file name
  664. } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
  665.  
  666. //
  667. // data structures used for registered symbol callbacks
  668. //
  669.  
  670. #define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001
  671. #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002
  672. #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003
  673. #define CBA_SYMBOLS_UNLOADED                    0x00000004
  674. #define CBA_DUPLICATE_SYMBOL                    0x00000005
  675.  
  676. typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
  677.     DWORD                       SizeOfStruct;           // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD)
  678.     DWORD                       BaseOfImage;            // base load address of module
  679.     DWORD                       CheckSum;               // checksum from the pe header
  680.     DWORD                       TimeDateStamp;          // date/time stamp from pe header
  681.     CHAR                        FileName[MAX_PATH];     // symbols file or image name
  682. } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
  683.  
  684. typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
  685.     DWORD                       SizeOfStruct;           // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL)
  686.     DWORD                       NumberOfDups;           // number of duplicates in the Symbol array
  687.     PIMAGEHLP_SYMBOL            Symbol;                 // array of duplicate symbols
  688.     ULONG                       SelectedSymbol;         // symbol selected (-1 to start)
  689. } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
  690.  
  691.  
  692. //
  693. // options that are set/returned by SymSetOptions() & SymGetOptions()
  694. // these are used as a mask
  695. //
  696. #define SYMOPT_CASE_INSENSITIVE  0x00000001
  697. #define SYMOPT_UNDNAME           0x00000002
  698. #define SYMOPT_DEFERRED_LOADS    0x00000004
  699. #define SYMOPT_NO_CPP            0x00000008
  700.  
  701.  
  702. DWORD
  703. IMAGEAPI
  704. SymSetOptions(
  705.     IN DWORD   SymOptions
  706.     );
  707.  
  708. DWORD
  709. IMAGEAPI
  710. SymGetOptions(
  711.     VOID
  712.     );
  713.  
  714. BOOL
  715. IMAGEAPI
  716. SymCleanup(
  717.     IN HANDLE hProcess
  718.     );
  719.  
  720. BOOL
  721. IMAGEAPI
  722. SymEnumerateModules(
  723.     IN HANDLE                       hProcess,
  724.     IN PSYM_ENUMMODULES_CALLBACK    EnumModulesCallback,
  725.     IN PVOID                        UserContext
  726.     );
  727.  
  728. BOOL
  729. IMAGEAPI
  730. SymEnumerateSymbols(
  731.     IN HANDLE                       hProcess,
  732.     IN DWORD                        BaseOfDll,
  733.     IN PSYM_ENUMSYMBOLS_CALLBACK    EnumSymbolsCallback,
  734.     IN PVOID                        UserContext
  735.     );
  736.  
  737. BOOL
  738. IMAGEAPI
  739. EnumerateLoadedModules(
  740.     IN HANDLE                           hProcess,
  741.     IN PENUMLOADED_MODULES_CALLBACK     EnumLoadedModulesCallback,
  742.     IN PVOID                            UserContext
  743.     );
  744.  
  745. LPVOID
  746. IMAGEAPI
  747. SymFunctionTableAccess(
  748.     HANDLE  hProcess,
  749.     DWORD   AddrBase
  750.     );
  751.  
  752. BOOL
  753. IMAGEAPI
  754. SymGetModuleInfo(
  755.     IN  HANDLE              hProcess,
  756.     IN  DWORD               dwAddr,
  757.     OUT PIMAGEHLP_MODULE    ModuleInfo
  758.     );
  759.  
  760. DWORD
  761. IMAGEAPI
  762. SymGetModuleBase(
  763.     IN  HANDLE              hProcess,
  764.     IN  DWORD               dwAddr
  765.     );
  766.  
  767. BOOL
  768. IMAGEAPI
  769. SymGetSymFromAddr(
  770.     IN  HANDLE              hProcess,
  771.     IN  DWORD               dwAddr,
  772.     OUT PDWORD              pdwDisplacement,
  773.     OUT PIMAGEHLP_SYMBOL    Symbol
  774.     );
  775.  
  776. BOOL
  777. IMAGEAPI
  778. SymGetSymFromName(
  779.     IN  HANDLE              hProcess,
  780.     IN  LPSTR               Name,
  781.     OUT PIMAGEHLP_SYMBOL    Symbol
  782.     );
  783.  
  784. BOOL
  785. IMAGEAPI
  786. SymGetSymNext(
  787.     IN     HANDLE              hProcess,
  788.     IN OUT PIMAGEHLP_SYMBOL    Symbol
  789.     );
  790.  
  791. BOOL
  792. IMAGEAPI
  793. SymGetSymPrev(
  794.     IN     HANDLE              hProcess,
  795.     IN OUT PIMAGEHLP_SYMBOL    Symbol
  796.     );
  797.  
  798. BOOL
  799. IMAGEAPI
  800. SymInitialize(
  801.     IN HANDLE   hProcess,
  802.     IN LPSTR    UserSearchPath,
  803.     IN BOOL     fInvadeProcess
  804.     );
  805.  
  806. BOOL
  807. IMAGEAPI
  808. SymGetSearchPath(
  809.     IN  HANDLE          hProcess,
  810.     OUT LPSTR           SearchPath,
  811.     IN  DWORD           SearchPathLength
  812.     );
  813.  
  814. BOOL
  815. IMAGEAPI
  816. SymSetSearchPath(
  817.     IN HANDLE           hProcess,
  818.     IN LPSTR            SearchPath
  819.     );
  820.  
  821. BOOL
  822. IMAGEAPI
  823. SymLoadModule(
  824.     IN  HANDLE          hProcess,
  825.     IN  HANDLE          hFile,
  826.     IN  PSTR            ImageName,
  827.     IN  PSTR            ModuleName,
  828.     IN  DWORD           BaseOfDll,
  829.     IN  DWORD           SizeOfDll
  830.     );
  831.  
  832. BOOL
  833. IMAGEAPI
  834. SymUnloadModule(
  835.     IN  HANDLE          hProcess,
  836.     IN  DWORD           BaseOfDll
  837.     );
  838.  
  839. BOOL
  840. IMAGEAPI
  841. SymUnDName(
  842.     IN  PIMAGEHLP_SYMBOL sym,               // Symbol to undecorate
  843.     OUT LPSTR            UnDecName,         // Buffer to store undecorated name in
  844.     IN  DWORD            UnDecNameLength    // Size of the buffer
  845.     );
  846.  
  847. BOOL
  848. IMAGEAPI
  849. SymRegisterCallback(
  850.     IN HANDLE                       hProcess,
  851.     IN PSYMBOL_REGISTERED_CALLBACK  CallbackFunction,
  852.     IN PVOID                        UserContext
  853.     );
  854.  
  855. // Image Integrity API's
  856.  
  857. #define CERT_PE_IMAGE_DIGEST_DEBUG_INFO         0x01
  858. #define CERT_PE_IMAGE_DIGEST_RESOURCES          0x02
  859. #define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO    0x04
  860.  
  861. #define CERT_SECTION_TYPE_ANY                   0xFF      // Any Certificate type
  862.  
  863. typedef PVOID DIGEST_HANDLE;
  864.  
  865. typedef BOOL (WINAPI *DIGEST_FUNCTION) (DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength);
  866.  
  867. BOOL
  868. IMAGEAPI
  869. ImageGetDigestStream(
  870.     IN      HANDLE  FileHandle,
  871.     IN      DWORD   DigestLevel,
  872.     IN      DIGEST_FUNCTION DigestFunction,
  873.     IN      DIGEST_HANDLE   DigestHandle
  874.     );
  875.  
  876. BOOL
  877. IMAGEAPI
  878. ImageAddCertificate(
  879.     IN      HANDLE  FileHandle,
  880.     IN      LPWIN_CERTIFICATE   Certificate,
  881.     OUT     PDWORD  Index
  882.     );
  883.  
  884. BOOL
  885. IMAGEAPI
  886. ImageRemoveCertificate(
  887.     IN      HANDLE   FileHandle,
  888.     IN      DWORD    Index
  889.     );
  890.  
  891. BOOL
  892. IMAGEAPI
  893. ImageEnumerateCertificates(
  894.     IN      HANDLE  FileHandle,
  895.     IN      WORD    TypeFilter,
  896.     OUT     PDWORD  CertificateCount,
  897.     IN OUT  PDWORD  Indices OPTIONAL,
  898.     IN OUT  DWORD   IndexCount  OPTIONAL
  899.     );
  900.  
  901. BOOL
  902. IMAGEAPI
  903. ImageGetCertificateData(
  904.     IN      HANDLE  FileHandle,
  905.     IN      DWORD   CertificateIndex,
  906.     OUT     LPWIN_CERTIFICATE Certificate,
  907.     IN OUT  PDWORD  RequiredLength
  908.     );
  909.  
  910. BOOL
  911. IMAGEAPI
  912. ImageGetCertificateHeader(
  913.     IN      HANDLE  FileHandle,
  914.     IN      DWORD   CertificateIndex,
  915.     IN OUT  LPWIN_CERTIFICATE Certificateheader
  916.     );
  917.  
  918. #ifdef __cplusplus
  919. }
  920. #endif
  921.  
  922. #endif  // _IMAGEHLP_
  923.